package com.py.credit.dao;

import com.py.credit.entity.CoverageData;
import com.py.credit.entity.DataTableEntity;
import com.py.credit.entity.Table;
import com.py.framework.core.common.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 功能描述: 覆盖率查询dao
 *
 * @author YaoS
 * @date 19/4/9 10:04
 */
public interface DataCoverageDao {

    /**
     * 功能描述: 查询unique表归集总数
     *
     * @return 查询结果
     * @author YaoS
     * @date 19/4/8 18:30
     */
    Integer bodyCorporateCount();

    /**
     * 功能描述: 查询单张资源表总数据数
     *
     * @param tableName 表名
     * @return 查询结果
     * @author YaoS
     * @date 19/4/9 11:03
     */
    Integer getAllDataCount(@Param(value = "tableName") String tableName);

    /**
     * 功能描述:统计单张表已归集资源数
     *
     * @param tableName 表名
     * @return 查询结果
     * @author YaoS
     * @date 19/4/9 11:03
     */
    Integer getCompletedDataCount(@Param(value = "tableName") String tableName);

    /**
     * 功能描述: 查询去重后单张表已归集资源数
     *
     * @param tableName 表名
     * @return 查询结果
     * @author YaoS
     * @date 19/4/8 18:33
     */
    Integer getDisDataCount(@Param(value = "tableName") String tableName);

    /**
     * 功能描述: 根据资源ID查询资源信息
     *
     * @param id 资源id
     * @return 资源信息
     * @author YaoS
     * @date 19/4/9 11:11
     */
    Table getTableById(@Param(value = "id") int id);

    /**
     * 功能描述: 定时任务新增数据覆盖数据
     *
     * @param coverageData 覆盖率对象
     * @author YaoS
     * @date 19/4/9 11:46
     */
    void insertDataCount(CoverageData coverageData);

    /**
     * 功能描述:删除表中覆盖数据
     *
     * @author YaoS
     * @date 19/4/9 11:47
     */
    void deleteDataCount();

    /**
     * 新增关联表数据
     *
     * @param list
     */
    void insertColumnTable(List<DataTableEntity> list);

    /**
     * 删除关联表数据
     */
    void deleteColumnTable();

    /**
     * 查询关联表信息
     */
    List<Map<String, Object>> selectAllTableData(@Param(value = "tableId") int tableId);

    /**
     * 功能描述: 查询覆盖率总信息
     *
     * @return 查询结果
     * @author YaoS
     * @date 19/4/9 11:22
     */
    List<Map<String, Object>> selectInsertDataCount();

    /**
     * 删除企业信息
     */
    void deleteDeptCount();

    /**
     * 分页详细数据
     *
     * @param tableName
     * @return
     */
    List<Map<String, Object>> getDataDept(@Param(value = "tableName") String tableName);

    /**
     * 功能描述: 覆盖率分析详情
     *
     * @param tableId 资源Id
     * @return 查询结果
     * @author YaoS
     * @date 19/4/9 12:24
     */
    List<Map<String, Object>> selectInsertColumnTable(@Param(value = "tableid") int tableId);

    /**
     * 分页查询t_data_table柱状图信息
     *
     * @return
     */
    List<Map<String, Object>> selectInsertColumnTableForPage(@Param(value = "page") Page page);


    /**
     * 功能描述: 分页查询资源信息详情数据
     *
     * @param page      分页条件
     * @param tableName 资源名
     * @return 查询结果
     * @author YaoS
     * @date 19/4/9 11:31
     */
    List<Map<String, Object>> selectInsertDeptCountForPage(@Param(value = "page") Page page,
                                                           @Param(value = "tableName") String tableName);

    /**
     * 功能描述: 查询需要的表名
     *
     * @return 查询结果
     * @author YaoS
     * @date 19/4/4 10:36
     */
    List<String> selectTableName();

    /**
     * 功能描述: 查询所有已覆盖数据
     *
     * @param list 数据list
     * @return
     * @author YaoS
     * @date 19/4/4 11:04
     */
    Integer selectDataCount(List<String> list);

    /**
     * 功能描述: 查询表信息
     *
     * @return 查询结果
     * @author YaoS
     * @date 19/4/9 10:43
     */
    List<Table> selectTable();
}
